/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package amanda_gabriel_isabella_lucivania_monica.Model.Pojo;

import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;

/**
 * Entidade Atividade
 *
 * @author gabriel
 */
@Entity
@Table(name = "Atividade")
@PrimaryKeyJoinColumn(name = "fk_id_atividade", referencedColumnName = "id_atividade")
public class Atividade implements Serializable {

    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_atividade", unique = true, nullable = false)
    private int id;
    private String nome;
    private String tipo;
    private String datas;
    private double valor;
    @JoinColumn(name = "fk_id_turma", referencedColumnName = "id_turma")
    @ManyToOne
    private Turma turma;
    @OneToMany(mappedBy = "atividade")
    private List<HistoricoAtividade> historicosAtividade = new ArrayList<HistoricoAtividade>();

    /**
     * Construtor sem parâmetros da classe Atividade
     */
    public Atividade() {
    }

    /**
     * Construtor com parâmetros da classe Atividade (com relacionamentos)
     *
     * @param turma
     * @param nome
     * @param tipo
     * @param datas
     * @param valor
     */
    public Atividade(Turma turma, String nome, String tipo, String datas, double valor) {
        this.turma = turma;
        this.nome = nome;
        this.tipo = tipo;
        this.datas = datas;
        this.valor = valor;
    }

    /**
     * Construtor com parâmetros da classe Atividade (sem relacionamentos)
     *
     * @param nome
     * @param tipo
     * @param data
     * @param valor
     */
    public Atividade(String nome, String tipo, String data, double valor) {
        this.nome = nome;
        this.tipo = tipo;
        this.datas = data;
        this.valor = valor;

    }

    /**
     * Retorna o nome
     *
     * @return
     */
    public String getNome() {
        return nome;
    }

    /**
     * Seta o nome
     *
     * @param nome
     */
    public void setNome(String nome) {
        String oldNome = this.nome;
        this.nome = nome;
        changeSupport.firePropertyChange("nome", oldNome, nome);
    }

    /**
     * Retorna o tipo
     *
     * @return
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * Seta o tipo
     *
     * @param tipo
     */
    public void setTipo(String tipo) {
        String oldTipo = this.tipo;
        this.tipo = tipo;
        changeSupport.firePropertyChange("tipo", oldTipo, tipo);
    }

    /**
     * Retorna a data
     *
     * @return
     */
    public String getDatas() {
        return datas;
    }

    /**
     * Seta a data
     *
     * @param data
     */
    public void setDatas(String data) {
        String oldData = this.datas;
        this.datas = data;
        changeSupport.firePropertyChange("datas", oldData, data);
    }

    /**
     * Retorna o valor
     *
     * @return
     */
    public double getValor() {
        return valor;
    }

    /**
     * Seta o valor
     *
     * @param valor
     */
    public void setValor(double valor) {
        double oldValor = this.valor;
        this.valor = valor;
        changeSupport.firePropertyChange("valor", oldValor, valor);
    }

    /**
     * Retorna a turma
     *
     * @return
     */
    public Turma getTurma() {
        return turma;
    }

    /**
     * Seta a turma
     *
     * @param turma
     */
    public void setTurma(Turma turma) {
        Turma oldTurma = this.turma;
        this.turma = turma;
        changeSupport.firePropertyChange("turma", oldTurma, turma);
    }

    /**
     * Retorna uma lista de HistoricoAtividade
     *
     * @return
     */
    public List<HistoricoAtividade> getHistoricosAtividade() {
        return historicosAtividade;
    }

    /**
     * Seta a lista de HistoricoAtividade
     *
     * @param historicosAtividade
     */
    public void setHistoricosAtividade(List<HistoricoAtividade> historicosAtividade) {
        this.historicosAtividade = historicosAtividade;
    }

    /**
     * Retorna o Id
     *
     * @return
     */
    public int getId() {
        return id;
    }

    /**
     * Seta o Id
     *
     * @param id
     */
    public void setId(int id) {
        int oldId = this.id;

        this.id = id;
        changeSupport.firePropertyChange("id", oldId, id);

    }

    /**
     * Retorna uma String contendo informações da Atividade
     *
     * @return
     */
    @Override
    public String toString() {
        return ("Nome: " + this.getNome() + "    Tipo: " + this.getTipo() + "     Data: " + this.getDatas() + "     Valor: " + this.getValor());
    }
    
    public void adicionarHistoricoAtividade (HistoricoAtividade historicoAtividade){
        this.historicosAtividade.add(historicoAtividade);
    }
    
}